#!/usr/bin/enr/python3
# -*- coding: utf-8 -*-
# -------------------------------
# @Author : hurong
# @File : 06_func_demo.py
# @Time : 2023/6/30 14:45
# -------------------------------
'''
1.def:函数定义关键字
2.function_name:函数名称
3.():参数列表防止的位置，可以为空
4.parameter_list:可选，指定向函数中传递的参数
5.comments：可选，为函数指定注释
6.function_body:可选，指定函数体
'''
def func_demo():
#     函数体定义
    print("这是一个函数")

# a,b,c为形式参数
'''形式参数：定义函数时，函数名称后面括号中的参数
    实际参数：调用函数时，函数名称后面括号中的参数
'''
def func_with_params(a, b, c):
    '''这是一个携带参数的和注释的函数'''
    print(f"传入的参数为：a = {a},b={b},c={c}")

# 打印函数 comments的内容
# print(func_with_params.__doc__)
# help(func_with_params)

# 定义空函数;若还不知道如何实现，可以用pass占位符，不会报错。
# 或者使用'''comments'''不会报错
def filter_char(s):
    '''
    占位符，功能：过滤敏感词
    '''
    # pass

'''错误示范，默认值为空列表'''
# 默认值一定要用不可变对象，否则的话，默认值可能会随着调用发生变化，代码不可控
# def wrong_demo2(a,b,c=[]):
#     c.append(a)
#     c.append(b)
#     print(a,b,c)
#
# wrong_demo2(1,2)    # 输出结果：1 2 [1, 2]
# wrong_demo2(3,4)    # 输出结果：3 4 [1, 2, 3, 4]

# 定义加法函数
def sum(a, b):
    result = a+b
#     函数返回值；如果要打印函数的结果，一定要保证函数室友返回值的。
#     以下return返回值，可以在函数体中使用print(result)输出，结果一样
#     print(result)     # 但要注意，再函数体外再次输出print(r),返回的就是None
    return result,a,b


r = sum(1, 2)
print(r)    # 返回结果：(3, 1, 2)


# def homework(name, age, aim, position='位置参数'):
#     print(f"姓名：{name},年龄：{age},目标：{aim}")
#
# homework("hehe",22,'No1')

'''默认参数的使用'''
# def person(name, age, nationality='中国'):    # 默认参数：nationality,必须放在所有参数最后面
#     print(f"姓名为{name}")
#     print(f"国籍为：{nationality}")
#     if age >= 18:
#         print(f"{name} 已成年")
#     else:
#         print(f"{name} 未成年")


# 指定参数默认值错误
# def wrong_demo(a=1,b,c):
#     pass
# # 输出结果：SyntaxError: non-default argument follows default argument
"""函数的调用"""
# func_demo()     # 输出结果：这是一个函数
# 位置参数，调用的时候，输入的1，2，3为实参
# func_with_params(1,2,3)     # 输出结果：传入的参数为：a = 1,b=2,c=3
# 位置参数错误的例子，数量错误
# func_with_params(1,2,3,4)   # 输出结果：TypeError: func_with_params() takes 3 positional arguments but 4 were given
# 位置参数错误例子，顺序错误
# person(20,'lily')   # 输出结果：TypeError: '>=' not supported between instances of 'str' and 'int'
# person('lily',20)   # 输出结果：国籍为：中国   lily 已成年